profile
viewpoint
Jonas Schievink jonas-schievink @ferrous-systems Berlin, Germany compilers; embedded systems; emulators; Linux; please do not send me blockchain recruiting emails

dac-gmbh/serde_postgres 51

Easily Deserialize Postgres rows.

dac-gmbh/golomb-set 28

A Golomb Coded Set implementation in Rust

dac-gmbh/mail 21

mail, facade for a number of mail related crates for creating and sending mails

dac-gmbh/derefable 16

Automatically derive Deref/DerefMut implementations in Rust.

dac-gmbh/new-tokio-smtp 12

extendible SMTP (Simple Mail Transfer Protocol) implementation using tokio

dac-gmbh/asn1 10

An implementation of the ITU ASN.1 (X.680–X.699) specifications in Rust.

dac-gmbh/hyperdrive 6

Declarative HTTP request routing, guarding and decoding

dac-gmbh/gbl 5

GBL firmware file manipulation library

dac-gmbh/Variation 5

A procedural macro to generate variant based methods.

dac-gmbh/mail-chars 4

provids lookup table based char classification for mail related grammars

push eventjonas-schievink/nixpkgs

Rouven Czerwinski

commit sha 61da203324125f1969da086cb297c1ecd76350a6

boot.initrd.luks: remove x86_64/i586 AES modules Commit 1d2c3279311e4f03fcf164e1366f2fda9f4bfccf in the upstream kernel repository removed support for the scalar x86_64 and i586 AES assembly implementations, since the generic AES implementation generated by the compiler is faster for both platforms. Remove the modules from the cryptoModules list. This causes a regression for kernel versions >=5.4 which include the removal. This should have no negative impact on AES performance on older kernels since the generic implementation should be faster there as well since the implementation was hardly touched from its initial submission. Fixes #84842

view details

R. RyanTM

commit sha 1919db9478fb55dbbaead3a1342927fa80d105ce

capnproto: 0.7.0 -> 0.8.0

view details

Anthony Cowley

commit sha bdbffbe91b7d66649c3710c535c6f1268e5d5a00

hwdata: 0.316 -> 0.335

view details

Markus S. Wamser

commit sha 7127dd3fb63f179d8ed40ef4884d8cf44278fd27

gen-oath-safe: add dependency on file command

view details

gnidorah

commit sha d782c3daed3caf6bfeddec547c8161e1b06171dc

cdetheme: small adjustments

view details

puzzlewolf

commit sha 5c4f17c50eae8a95db71295d16785f42abc8002e

sequoia: 0.16.0 -> 0.17.0

view details

puzzlewolf

commit sha c26c77b5a33c13af80fd533f2712b7dd7a587dfc

sequoia: exclude tests for 'sequoia-store' Tests for 'sequoia-store' often error with 'Too many open filehandles' on ofBorg and Hydra. Exclude them until a better solution can be found.

view details

Fabian Geiselhart

commit sha ecb560bf473b89136e48fce1bfea596e3a76fc38

platformio: Put udev rules into package output

view details

Fabian Geiselhart

commit sha 5ed47f34e429a6d6f62867729b9f033e8fca12f2

platformio: Patch warning about missing udev rules This adds the sentence "On NixOS add the platformio package to services.udev.packages" to the warning.

view details

Simon Chatterjee

commit sha eb1ce34d3d7dd7ecdd1fc17347bc12755313f050

gperftools: fix build on ARM The use of libunwind by tcmalloc segfaults on ARM, so don't use that. See eg https://www.dcddcc.com/blog/2018-06-09-building-mongodb-for-32-bit-ARM-on-debian-ubuntu.html#problem-6-tcmalloc-and-libunwind

view details

Damien Cassou

commit sha 318fd31ee96aca1b5c67050ca0dd119d398c3d0c

vdirsyncerStable: 0.16.7 -> 0.16.8

view details

Pascal Bach

commit sha 2a9765e26522900f5c2e0a97a93d7284b9a38c52

unifiStable: 5.13.29 -> 5.13.32

view details

Pascal Bach

commit sha 3e7d650bcca2fb18cc05468878cbccfb06096f7b

nixos/unifi: restart service on package update Currently the service doesn't detect if on of the packages is updated and doesn't restart. By manually adding a trigger we make sure the service restarts if any of the involved packages update.

view details

R. RyanTM

commit sha 4742da08661b09b9c95777451ec9f9486c396eaf

lyx: 2.3.5.1 -> 2.3.5.2

view details

Imran Hossain

commit sha 56191821ea755a7e1cdd3985a89298d6ddfb8559

restic: Wrap binary with rclone

view details

Martin Milata

commit sha 384586db9503f3e6e88eda8a3805941b07aecc2f

mixxx: 2.2.3 -> 2.2.4 https://github.com/mixxxdj/mixxx/releases/tag/release-2.2.4

view details

Imran Hossain

commit sha 7dd656a037fa7f9581cab66764034edcca3de6f9

nixos/restic: Add options for rclone repositories

view details

Imran Hossain

commit sha 9b80955720a9a3aec891f4de058631f80d8e31b5

nixos/tests: Add rclone repository to restic test

view details

Daniël de Kok

commit sha 918d5cfb33b99874cf5849ee1e9b226c43ec5b69

python3Packages.tokenizers: 0.8.0 -> 0.8.1.rc1 Changelog: https://github.com/huggingface/tokenizers/releases/tag/python-v0.8.1.rc1

view details

Cole Mickens

commit sha 8734a5e362aad7668e528de0d1defa5b6bcd1529

firefox: wrapper: gdkWayland->forceWayland

view details

push time in 3 hours

push eventnrf-rs/ebyte-e73-tbx

Jonas Schievink

commit sha 2dfadc8be9a14ea2af960c4012caaf344ea239ef

Bump MSRV

view details

push time in 5 hours

pull request commentnrf-rs/nrf-hal

Add EBYTE E73-TBX BSP

Alright, I've put this up at https://github.com/nrf-rs/ebyte-e73-tbx and invited you there!

mariusknaust

comment created time in 5 hours

push eventnrf-rs/ebyte-e73-tbx

Jonas Schievink

commit sha 9fed7b205b6655f7cefb56cd27aa6ca1f641909c

Cargo.toml example

view details

push time in 5 hours

issue closedrust-lang/rust

Match arm treats ranges and conditions differently

I tried this code:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=b57dd6cc254167f09d1a51f753ddebb6

fn main() {
    match 42u32 {
        x if x >= 0 => dbg!(x)
    };
}

Gives error:

error[E0004]: non-exhaustive patterns: `_` not covered
 --> src/main.rs:2:11
  |
2 |     match 42u32 {
  |           ^^^^^ pattern `_` not covered
  |
  = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
  = note: the matched value is of type `u32`

However this one with ranges compiles fine:

fn main() {
    match 42u32 {
        x @ 0..=std::u32::MAX => dbg!(x)
    };
}

I would expect x @ 0..=std::u32::MAX and x if x >= 0 be equal in match arms.

closed time in 5 hours

kpp

issue commentrust-lang/rust

Match arm treats ranges and conditions differently

This is intentional – match guards are arbitrary expressions, and Rust doesn't look into the value of expressions to emit control-flow-related errors.

kpp

comment created time in 5 hours

push eventnrf-rs/ebyte-e73-tbx

Jonas Schievink

commit sha 87c02eecc451633aa409bc195c84a6f94f98cde5

Update to v0.11.0 of the HALs

view details

push time in 5 hours

push eventnrf-rs/ebyte-e73-tbx

Jonas Schievink

commit sha 6f734fa22b483ba840c6b543a4adfde6860fded5

fmt

view details

push time in 5 hours

create barnchnrf-rs/ebyte-e73-tbx

branch : master

created branch time in 6 hours

created repositorynrf-rs/ebyte-e73-tbx

BSP for the Ebyte E73-TBA and E73-TBB

created time in 6 hours

release nrf-rs/nrf-hal

v0.11.0

released time in 6 hours

delete branch jonas-schievink/nrf52-hal

delete branch : 0.11.0

delete time in 6 hours

push eventnrf-rs/nrf-hal

Jonas Schievink

commit sha 484398687906d3621fc95c88416a3b5f6efee644

0.11.0

view details

Jonas Schievink

commit sha 6b37257822a1fea6c4067c235cc0a7d44c348760

Remove unnecessary version constraints from demos

view details

Jonas Schievink

commit sha d1060760bcf49ce1b9b52c2a97c0b1a0456bdab4

Merge pull request #177 from jonas-schievink/0.11.0 0.11.0

view details

push time in 6 hours

PR merged nrf-rs/nrf-hal

0.11.0

(publishing now)

+16 -22

0 comment

12 changed files

jonas-schievink

pr closed time in 6 hours

created tagnrf-rs/nrf-hal

tagv0.11.0

A Rust HAL for the nRF family of devices

created time in 6 hours

created tagjonas-schievink/nrf52-hal

tagv0.8.1

A Rust HAL for the nrf52 family of devices

created time in 6 hours

created tagjonas-schievink/nrf52-hal

tagv0.8.0

A Rust HAL for the nrf52 family of devices

created time in 6 hours

created tagjonas-schievink/nrf52-hal

tagv0.11.0

A Rust HAL for the nrf52 family of devices

created time in 6 hours

push eventjonas-schievink/nrf52-hal

Jonas Schievink

commit sha 6b37257822a1fea6c4067c235cc0a7d44c348760

Remove unnecessary version constraints from demos

view details

push time in 6 hours

PR opened nrf-rs/nrf-hal

0.11.0

(publishing now)

+15 -14

0 comment

8 changed files

pr created time in 6 hours

create barnchjonas-schievink/nrf52-hal

branch : 0.11.0

created branch time in 6 hours

delete branch jonas-schievink/nrf52-hal

delete branch : rm-boards

delete time in 6 hours

push eventjonas-schievink/nrf52-hal

Jonas Schievink

commit sha 5e7215a338018003270ae860d5e7700a6363cad0

Delete board support crates

view details

push time in 8 hours

PR opened nrf-rs/nrf-hal

Delete board support crates

I've moved the remaining ones into their own repos in this org.

Fixes https://github.com/nrf-rs/nrf-hal/issues/141

+2 -2729

0 comment

22 changed files

pr created time in 8 hours

create barnchjonas-schievink/nrf52-hal

branch : rm-boards

created branch time in 8 hours

create barnchnrf-rs/adafruit-nrf52-pro

branch : master

created branch time in 8 hours

created repositorynrf-rs/adafruit-nrf52-pro

BSP for the Adafruit Feather nRF52 Pro

created time in 8 hours

create barnchnrf-rs/adafruit-nrf52-bluefruit-le

branch : master

created branch time in 9 hours

created repositorynrf-rs/adafruit-nrf52-bluefruit-le

BSP for the Adafruit Feather nRF52 Bluefruit LE

created time in 9 hours

Pull request review commentnrf-rs/nrf-hal

Watchdog

+//! HAL interface to the WDT peripheral+//!+//! This HAL implements a basic watchdog timer with 1..=8 handles.+//! Once the watchdog has been started, it cannot be stopped.++use crate::pac::WDT;++/// A type state representing a watchdog that has not been started+pub struct Inactive;++/// A type state representing a watchdog that has been started and cannot be stopped+pub struct Active;++/// An interface to the Watchdog+pub struct Watchdog<T: sealed::WdMode> {+    wdt: WDT,+    _state: T,+}++/// An interface to feed the Watchdog+pub struct WatchdogHandle<T: sealed::HandleId>(T);++impl<T> WatchdogHandle<T>+where+    T: sealed::HandleId,+{+    /// Pet the watchdog+    ///+    /// This function pets the given watchdog handle.+    ///+    /// NOTE: All active handles must be pet within the time interval to+    /// prevent a reset from occuring.+    #[inline]+    pub fn pet(&mut self) {+        let hdl = unsafe { &*WDT::ptr() };+        hdl.rr[self.0.index()].write(|w| w.rr().reload());+    }++    /// Has this handle been pet within the current window?+    pub fn is_pet(&self) -> bool {+        let hdl = unsafe { &*WDT::ptr() };+        let rd = hdl.reqstatus.read().bits();+        let idx = self.0.index();+        debug_assert!(idx < 8, "Bad Index!");+        ((rd >> idx) & 0x1) == 0+    }++    /// Convert the handle into a generic handle+    ///+    /// This is useful if you need to place handles into an array+    pub fn degrade(self) -> WatchdogHandle<HdlN> {+        WatchdogHandle(HdlN {+            idx: self.0.index() as u8,+        })+    }+}++/// A type state representing Watchdog Handle 0+pub struct Hdl0;+/// A type state representing Watchdog Handle 1+pub struct Hdl1;+/// A type state representing Watchdog Handle 2+pub struct Hdl2;+/// A type state representing Watchdog Handle 3+pub struct Hdl3;+/// A type state representing Watchdog Handle 4+pub struct Hdl4;+/// A type state representing Watchdog Handle 5+pub struct Hdl5;+/// A type state representing Watchdog Handle 6+pub struct Hdl6;+/// A type state representing Watchdog Handle 7+pub struct Hdl7;++/// A structure that represents a runtime stored Watchdog Handle+pub struct HdlN {+    idx: u8,+}++/// A structure containing the active watchdog and all requested+/// Watchdog handles+pub struct Parts {+    pub wdt: Watchdog<Active>,+    pub hdl0: WatchdogHandle<Hdl0>,+    pub hdl1: Option<WatchdogHandle<Hdl1>>,+    pub hdl2: Option<WatchdogHandle<Hdl2>>,+    pub hdl3: Option<WatchdogHandle<Hdl3>>,+    pub hdl4: Option<WatchdogHandle<Hdl4>>,+    pub hdl5: Option<WatchdogHandle<Hdl5>>,+    pub hdl6: Option<WatchdogHandle<Hdl6>>,+    pub hdl7: Option<WatchdogHandle<Hdl7>>,+}++/// The number of watchdog handles to activate+#[derive(Debug, Ord, PartialOrd, Eq, PartialEq)]+pub enum NumHandles {+    One,+    Two,+    Three,+    Four,+    Five,+    Six,+    Seven,+    Eight,+}++impl Watchdog<Inactive> {+    /// Create a new watchdog instance from the peripheral+    pub fn new(wdt: WDT) -> Watchdog<Inactive> {+        Watchdog {+            wdt,+            _state: Inactive,+        }+    }++    /// Release the peripheral+    ///+    /// Note: The peripheral cannot be released after activation+    pub fn release(self) -> WDT {+        self.wdt+    }++    /// Activate the watchdog with the given number of handles+    ///+    /// The watchdog cannot be deactivated after starting.+    ///+    /// NOTE: All activated handles must be pet within the configured time interval to+    /// prevent a reset from occuring.+    pub fn activate(self, handles: NumHandles) -> Parts {+        self.wdt.rren.write(|w| unsafe {+            w.bits(match handles {+                NumHandles::One => 0b0000_0001,+                NumHandles::Two => 0b0000_0011,+                NumHandles::Three => 0b0000_0111,+                NumHandles::Four => 0b0000_1111,+                NumHandles::Five => 0b0001_1111,+                NumHandles::Six => 0b0011_1111,+                NumHandles::Seven => 0b0111_1111,+                NumHandles::Eight => 0b1111_1111,+            })+        });+        self.wdt.tasks_start.write(|w| unsafe { w.bits(1) });+        Parts {+            wdt: Watchdog {+                wdt: self.wdt,+                _state: Active,+            },+            hdl0: WatchdogHandle(Hdl0),+            hdl1: if handles >= NumHandles::Two {+                Some(WatchdogHandle(Hdl1))+            } else {+                None+            },+            hdl2: if handles >= NumHandles::Three {+                Some(WatchdogHandle(Hdl2))+            } else {+                None+            },+            hdl3: if handles >= NumHandles::Four {+                Some(WatchdogHandle(Hdl3))+            } else {+                None+            },+            hdl4: if handles >= NumHandles::Five {+                Some(WatchdogHandle(Hdl4))+            } else {+                None+            },+            hdl5: if handles >= NumHandles::Six {+                Some(WatchdogHandle(Hdl5))+            } else {+                None+            },+            hdl6: if handles >= NumHandles::Seven {+                Some(WatchdogHandle(Hdl6))+            } else {+                None+            },+            hdl7: if handles == NumHandles::Eight {+                Some(WatchdogHandle(Hdl7))+            } else {+                None+            },+        }+    }++    /// Enable the watchdog interrupt+    ///+    /// NOTE: Although the interrupt will occur, there is no way to prevent+    /// the reset from occuring. From the time the event was fired, the+    /// system will reset two LFCLK ticks later (61 microseconds) if the+    /// interrupt has been enabled.+    #[inline(always)]+    pub fn enable_interrupt(&mut self) {+        self.wdt.intenset.write(|w| w.timeout().set_bit());+    }++    /// Disable the watchdog interrupt+    ///+    /// NOTE: This has no effect on the reset caused by the Watchdog+    #[inline(always)]+    pub fn disable_interrupt(&mut self) {+        self.wdt.intenclr.write(|w| w.timeout().set_bit());+    }++    /// Set the number of 32.768kHz ticks in each watchdog period+    ///+    /// This value defaults to 0xFFFF_FFFF (1.5 days) on reset.+    ///+    /// Note: there is a minimum of 15 ticks (458 microseconds). If a lower+    /// number is provided, 15 ticks will be used as the configured value+    #[inline(always)]+    pub fn set_lfosc_ticks(&mut self, ticks: u32) {+        self.wdt+            .crv+            .write(|w| unsafe { w.bits(ticks.max(0x0000_000F)) });+    }++    /// Should the watchdog continue to count during sleep modes?+    ///+    /// This value defaults to ENABLED on reset.+    pub fn run_during_sleep(&self, setting: bool) {+        self.wdt.config.modify(|_r, w| w.sleep().bit(setting));+    }++    /// Should the watchdog continue to count when the CPU is halted for debug?+    ///+    /// This value defaults to DISABLED on reset.+    pub fn run_during_debug_halt(&self, setting: bool) {+        self.wdt.config.modify(|_r, w| w.halt().bit(setting));+    }+}++impl Watchdog<Active> {+    /// Is the watchdog still awaiting pets from any handle?+    ///+    /// This reports whether sufficient pets have been received from all+    /// handles to prevent a reset this time period+    #[inline(always)]+    pub fn awaiting_pets(&self) -> bool {+        let enabled = self.wdt.rren.read().bits();+        let status = self.wdt.reqstatus.read().bits();+        (status & enabled) == 0+    }+}++impl<T> Watchdog<T>+where+    T: sealed::WdMode,+{+    /// Is the watchdog active?+    #[inline(always)]+    pub fn is_running(&self) -> bool {+        // TODO: Should we just believe the type state?

Since the watchdog can apparently be running after reset, it seems like the typestate is actually incorrect, so why not remove it?

jamesmunns

comment created time in 9 hours

create barnchnrf-rs/nrf52-dk

branch : master

created branch time in 9 hours

created repositorynrf-rs/nrf52-dk

BSP for the nRF52-DK

created time in 9 hours

create barnchnrf-rs/nrf9160-dk

branch : master

created branch time in 12 hours

created repositorynrf-rs/nrf9160-dk

BSP for the Nordic nRF9160-DK

created time in 12 hours

push eventnrf-rs/actinius-icarus

Jonas Schievink

commit sha e0449d58cf9e66fdbc3ec31cc0e1a61f97409efd

Don't run `cargo test` in CI

view details

push time in 12 hours

create barnchnrf-rs/actinius-icarus

branch : master

created branch time in 13 hours

created repositorynrf-rs/actinius-icarus

BSP for the Actinius Icarus IoT Dev Board (nRF9160)

created time in 13 hours

issue commentrust-lang/rust

Compiling rustc-1.44.1 (miri) fails

Your build succeeded, just miri didn't build

dilyanpalauzov

comment created time in 15 hours

issue closedrust-lang/rust

proc_macro_attribute compiling failure

<!-- Thank you for filing a bug report! 🐛 Please provide a short summary of the bug, along with any information you feel relevant to replicating the bug. --> A valid tokenstream caused proc_macro_attribute compiling failure.

I tried this code:

lib.rs:

extern crate proc_macro;

use proc_macro::TokenStream;

#[proc_macro]
pub fn make_answer(input: TokenStream) -> TokenStream {
    println!("{:#?}", input);
    "fn answer() { println!(\"42\"); }".parse().unwrap()
}

#[proc_macro_attribute]
pub fn shell(_attr: TokenStream, input: TokenStream) -> TokenStream {
    println!("{:#?}", input);
    "fn answer2() { println!(\"42\")}".parse().unwrap()
}

main.rs:

use shell_macros::{make_answer, shell};

make_answer!(
    #uptime // not used for now
);

#[shell]
fn answer2() {
    #uptime // not used for now
}

fn main() {
    answer();   // ok
    answer2();  // failed
}

I expected to see this happen: both answer() and answer2() will be working.

Instead, this happened: calling answer2() failed:

error: expected one of `!` or `[`, found `uptime`
 --> src/main.rs:9:6
  |
9 |     #uptime // not used for now
  |      ^^^^^^ expected one of `!` or `[`

Meta

<!-- If you're using the stable version of the compiler, you should also check if the bug also exists in the beta or nightly versions. -->

rustc --version --verbose:

rustc 1.44.1 (c7087fe00 2020-06-17)
binary: rustc
commit-hash: c7087fe00d2ba919df1d813c040a5d47e43b0fe7
commit-date: 2020-06-17
host: x86_64-apple-darwin
release: 1.44.1
LLVM version: 9.0

PS, declarative macros can also accept such token stream.

closed time in 15 hours

tao-guo

issue commentrust-lang/rust

proc_macro_attribute compiling failure

Yes, this is working as intended

tao-guo

comment created time in 15 hours

issue commentrust-lang/rust

Compiler null dereference when there are conflicting asm labels

On the playground this seems to hang instead

addrianyy

comment created time in 15 hours

issue commentrust-lang/rust

ICE on closures of trait bounds with indefinite lifetime parameters

Presumably part of https://github.com/rust-lang/rust/issues/62529

hjgz

comment created time in 15 hours

issue closedrust-lang/rust

Compiling rustc-1.44.1 (miri) fails

I called configure --enable-parallel-compiler --enable-optimize --llvm-root=/usr/local --enable-extended --enable-llvm-link-shared --enable-local-rust, python x.py build --jobs=1 and then this happened:

    Finished dev [unoptimized] target(s) in 0.18s
Building stage0 std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.18s
Copying stage0 std from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
Building stage0 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.25s
Copying stage0 rustc from stage0 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
Assembling stage1 compiler (x86_64-unknown-linux-gnu)
Building stage1 std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.18s
Copying stage1 std from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
Building stage1 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.25s
Copying stage1 rustc from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
Assembling stage2 compiler (x86_64-unknown-linux-gnu)
Uplifting stage1 std (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
Copying stage2 std from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
Uplifting stage1 rustc (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
Copying stage2 rustc from stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu / x86_64-unknown-linux-gnu)
Building stage2 tool cargo (x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.23s
Building stage2 tool clippy-driver (x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.19s
Building stage2 tool rls (x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.30s
Building rustdoc for stage2 (x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.19s
Building stage2 tool rustfmt (x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 0.25s
Building stage2 tool miri (x86_64-unknown-linux-gnu)
   Compiling miri v0.1.0 (/src/rustc-1.44.1-src/src/tools/miri)
error[E0478]: lifetime bound not satisfied
   --> src/tools/miri/src/diagnostics.rs:182:18
    |
182 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 182:12
   --> src/tools/miri/src/diagnostics.rs:182:12
    |
182 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 182:6
   --> src/tools/miri/src/diagnostics.rs:182:6
    |
182 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/helpers.rs:15:18
   |
15 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 15:12
  --> src/tools/miri/src/helpers.rs:15:12
   |
15 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 15:6
  --> src/tools/miri/src/helpers.rs:15:6
   |
15 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
   --> src/tools/miri/src/helpers.rs:267:35
    |
267 |         impl<'ecx, 'mir, 'tcx, F> ValueVisitor<'mir, 'tcx, Evaluator<'tcx>>
    |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 267:26
   --> src/tools/miri/src/helpers.rs:267:26
    |
267 |         impl<'ecx, 'mir, 'tcx, F> ValueVisitor<'mir, 'tcx, Evaluator<'tcx>>
    |                          ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 267:20
   --> src/tools/miri/src/helpers.rs:267:20
    |
267 |         impl<'ecx, 'mir, 'tcx, F> ValueVisitor<'mir, 'tcx, Evaluator<'tcx>>
    |                    ^^^^

error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'tcx` due to conflicting requirements
   --> src/tools/miri/src/helpers.rs:267:35
    |
267 |         impl<'ecx, 'mir, 'tcx, F> ValueVisitor<'mir, 'tcx, Evaluator<'tcx>>
    |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: first, the lifetime cannot outlive the lifetime `'tcx` as defined on the impl at 267:26...
   --> src/tools/miri/src/helpers.rs:267:26
    |
267 |         impl<'ecx, 'mir, 'tcx, F> ValueVisitor<'mir, 'tcx, Evaluator<'tcx>>
    |                          ^^^^
note: ...so that the types are compatible
   --> src/tools/miri/src/helpers.rs:267:35
    |
267 |         impl<'ecx, 'mir, 'tcx, F> ValueVisitor<'mir, 'tcx, Evaluator<'tcx>>
    |                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    = note: expected  `rustc_mir::interpret::ValueVisitor<'mir, 'tcx, machine::Evaluator<'tcx>>`
               found  `rustc_mir::interpret::ValueVisitor<'_, '_, machine::Evaluator<'_>>`
note: but, the lifetime must be valid for the lifetime `'mir` as defined on the impl at 267:20...
   --> src/tools/miri/src/helpers.rs:267:20
    |
267 |         impl<'ecx, 'mir, 'tcx, F> ValueVisitor<'mir, 'tcx, Evaluator<'tcx>>
    |                    ^^^^
note: ...so that the types are compatible
   --> src/tools/miri/src/helpers.rs:272:22
    |
272 |             type V = MPlaceTy<'tcx, Tag>;
    |                      ^^^^^^^^^^^^^^^^^^^
    = note: expected  `rustc_mir::interpret::visitor::Value<'mir, 'tcx, machine::Evaluator<'tcx>>`
               found  `rustc_mir::interpret::visitor::Value<'_, '_, machine::Evaluator<'tcx>>`

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/dlsym.rs:23:18
   |
23 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 23:12
  --> src/tools/miri/src/shims/dlsym.rs:23:12
   |
23 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 23:6
  --> src/tools/miri/src/shims/dlsym.rs:23:6
   |
23 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
   --> src/tools/miri/src/shims/env.rs:100:18
    |
100 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 100:12
   --> src/tools/miri/src/shims/env.rs:100:12
    |
100 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 100:6
   --> src/tools/miri/src/shims/env.rs:100:6
    |
100 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |      ^^^^

error[E0478]: lifetime bound not satisfied
 --> src/tools/miri/src/shims/foreign_items/windows.rs:8:18
  |
8 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 8:12
 --> src/tools/miri/src/shims/foreign_items/windows.rs:8:12
  |
8 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 8:6
 --> src/tools/miri/src/shims/foreign_items/windows.rs:8:6
  |
8 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |      ^^^^

error[E0478]: lifetime bound not satisfied
 --> src/tools/miri/src/shims/foreign_items/posix/linux.rs:4:18
  |
4 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 4:12
 --> src/tools/miri/src/shims/foreign_items/posix/linux.rs:4:12
  |
4 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 4:6
 --> src/tools/miri/src/shims/foreign_items/posix/linux.rs:4:6
  |
4 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |      ^^^^

error[E0478]: lifetime bound not satisfied
 --> src/tools/miri/src/shims/foreign_items/posix/macos.rs:4:18
  |
4 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 4:12
 --> src/tools/miri/src/shims/foreign_items/posix/macos.rs:4:12
  |
4 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 4:6
 --> src/tools/miri/src/shims/foreign_items/posix/macos.rs:4:6
  |
4 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
  |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/foreign_items/posix.rs:12:18
   |
12 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 12:12
  --> src/tools/miri/src/shims/foreign_items/posix.rs:12:12
   |
12 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 12:6
  --> src/tools/miri/src/shims/foreign_items/posix.rs:12:6
   |
12 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/foreign_items.rs:15:18
   |
15 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 15:12
  --> src/tools/miri/src/shims/foreign_items.rs:15:12
   |
15 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 15:6
  --> src/tools/miri/src/shims/foreign_items.rs:15:6
   |
15 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/fs.rs:67:18
   |
67 | impl<'mir, 'tcx> EvalContextExtPrivate<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 67:12
  --> src/tools/miri/src/shims/fs.rs:67:12
   |
67 | impl<'mir, 'tcx> EvalContextExtPrivate<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 67:6
  --> src/tools/miri/src/shims/fs.rs:67:6
   |
67 | impl<'mir, 'tcx> EvalContextExtPrivate<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
   --> src/tools/miri/src/shims/fs.rs:235:18
    |
235 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 235:12
   --> src/tools/miri/src/shims/fs.rs:235:12
    |
235 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 235:6
   --> src/tools/miri/src/shims/fs.rs:235:6
    |
235 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/intrinsics.rs:10:18
   |
10 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 10:12
  --> src/tools/miri/src/shims/intrinsics.rs:10:12
   |
10 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 10:6
  --> src/tools/miri/src/shims/intrinsics.rs:10:6
   |
10 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/os_str.rs:63:18
   |
63 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 63:12
  --> src/tools/miri/src/shims/os_str.rs:63:12
   |
63 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 63:6
  --> src/tools/miri/src/shims/os_str.rs:63:6
   |
63 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/panic.rs:34:18
   |
34 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 34:12
  --> src/tools/miri/src/shims/panic.rs:34:12
   |
34 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 34:6
  --> src/tools/miri/src/shims/panic.rs:34:6
   |
34 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
   --> src/tools/miri/src/shims/sync.rs:203:18
    |
203 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 203:12
   --> src/tools/miri/src/shims/sync.rs:203:12
    |
203 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 203:6
   --> src/tools/miri/src/shims/sync.rs:203:6
    |
203 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/time.rs:17:18
   |
17 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 17:12
  --> src/tools/miri/src/shims/time.rs:17:12
   |
17 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 17:6
  --> src/tools/miri/src/shims/time.rs:17:6
   |
17 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
   --> src/tools/miri/src/shims/tls.rs:157:18
    |
157 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 157:12
   --> src/tools/miri/src/shims/tls.rs:157:12
    |
157 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 157:6
   --> src/tools/miri/src/shims/tls.rs:157:6
    |
157 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |      ^^^^

error[E0478]: lifetime bound not satisfied
  --> src/tools/miri/src/shims/mod.rs:20:18
   |
20 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 20:12
  --> src/tools/miri/src/shims/mod.rs:20:12
   |
20 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 20:6
  --> src/tools/miri/src/shims/mod.rs:20:6
   |
20 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
   |      ^^^^

error[E0478]: lifetime bound not satisfied
   --> src/tools/miri/src/stacked_borrows.rs:509:18
    |
509 | impl<'mir, 'tcx> EvalContextPrivExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 509:12
   --> src/tools/miri/src/stacked_borrows.rs:509:12
    |
509 | impl<'mir, 'tcx> EvalContextPrivExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 509:6
   --> src/tools/miri/src/stacked_borrows.rs:509:6
    |
509 | impl<'mir, 'tcx> EvalContextPrivExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |      ^^^^

error[E0478]: lifetime bound not satisfied
   --> src/tools/miri/src/stacked_borrows.rs:610:18
    |
610 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
note: lifetime parameter instantiated with the lifetime `'tcx` as defined on the impl at 610:12
   --> src/tools/miri/src/stacked_borrows.rs:610:12
    |
610 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |            ^^^^
note: but lifetime parameter must outlive the lifetime `'mir` as defined on the impl at 610:6
   --> src/tools/miri/src/stacked_borrows.rs:610:6
    |
610 | impl<'mir, 'tcx> EvalContextExt<'mir, 'tcx> for crate::MiriEvalContext<'mir, 'tcx> {}
    |      ^^^^

error: aborting due to 22 previous errors

Some errors have detailed explanations: E0478, E0495.
For more information about an error, try `rustc --explain E0478`.
error: could not compile `miri`.

To learn more, run the command again with --verbose.
command did not execute successfully: "/usr/local/bin/cargo" "build" "--target" "x86_64-unknown-linux-gnu" "-Zbinary-dep-depinfo" "-j" "1" "--release" "--manifest-path" "/src/rustc-1.44.1-src/src/tools/miri/Cargo.toml" "--message-format" "json-render-diagnostics"
expected success, got: exit code: 101
Build completed successfully in 0:00:04

closed time in 15 hours

dilyanpalauzov

issue commentrust-lang/rust

Compiling rustc-1.44.1 (miri) fails

miri is not supported on stable

dilyanpalauzov

comment created time in 15 hours

delete branch jonas-schievink/cortex-m

delete branch : zero-means-zero

delete time in 16 hours

PR opened rust-embedded/cortex-m

Allow the taken flag to be optimized out

Fixes https://github.com/rust-embedded/cortex-m/issues/242

Verified manually that it still prevents linking in multiple versions.

+6 -3

0 comment

1 changed file

pr created time in a day

create barnchjonas-schievink/cortex-m

branch : zero-means-zero

created branch time in a day

issue openedrust-embedded/cortex-m

Remove `#[no_mangle]` from `CORE_PERIPHERALS` to enable zero-cost peripherals

The #[no_mangle] on the CORE_PERIPHERALS currently prevents LLVM from optimizing it out when only stored to:

https://github.com/rust-embedded/cortex-m/blob/1c9d36ebe682d79f35ef2b1f34e611cfbf8ee81e/src/peripheral/mod.rs#L152-L153

This means that even if an app only uses Peripherals::steal(), it still has to pay 1 Byte of RAM for the global. Since 1 is greater than 0, this can be improved.

#[no_mangle] is used to prevent multiple cortex-m versions to be linked together, so this behavior must be retained somehow. While we already use links in Cargo.toml for this, this only works with newer versions (that are currently not even released), so another (zero-sized) global should be introduced to take over CORE_PERIPHERALS' job.

created time in a day

push eventjonas-schievink/nrf52-hal

Jonas Schievink

commit sha ca418f48c801ebcf759fe3c82aeab49923a4ad66

Add changelog link to readme

view details

push time in a day

PR opened nrf-rs/nrf-hal

Improve the readme a bit
+11 -9

0 comment

2 changed files

pr created time in a day

create barnchjonas-schievink/nrf52-hal

branch : readme

created branch time in a day

delete branch jonas-schievink/nrf52-hal

delete branch : changelog

delete time in a day

push eventnrf-rs/nrf-hal

Jonas Schievink

commit sha 90a4f0c7e3ad84d74359d5c5b4e5e1a676f53b3c

nrf51-hal: fix repo link in metadata

view details

Jonas Schievink

commit sha 99d0c4a8a73feb0f916e0ba941481391ca22e5cd

Mark all demos as `publish = false`

view details

Jonas Schievink

commit sha b8474a4bbb42d3f27a7993f814881eabb5c6e5c5

Add a changelog for 0.10 -> 0.11

view details

Jonas Schievink

commit sha c94fedf3cc840d86fee3c31a369a12bc71f94489

Make wording more consistent

view details

Jonas Schievink

commit sha c861cd549b5cf48e6b4a9b0ac561b30524755695

Merge pull request #173 from jonas-schievink/changelog Add a Changelog (+ a few Cargo.toml fixes)

view details

push time in a day

PR merged nrf-rs/nrf-hal

Add a Changelog (+ a few Cargo.toml fixes)

Did I miss anything?

Closes https://github.com/nrf-rs/nrf-hal/issues/59

+42 -2

0 comment

9 changed files

jonas-schievink

pr closed time in a day

issue closednrf-rs/nrf-hal

Add changelogs

The crates in this repository currently don't have a changelog, and therefore no convenient way to check out what changed in new releases.

It's currently not clear to me what the best way to do this would be. Just copy-past the changes from nrf52-hal-common to all nrf528xx-hal changelogs?

closed time in a day

hannobraun

push eventjonas-schievink/nrf52-hal

Jonas Schievink

commit sha c94fedf3cc840d86fee3c31a369a12bc71f94489

Make wording more consistent

view details

push time in a day

issue closednrf-rs/nrf-hal

Add gpiote module to nrf52-hal-common

It would be nice to have a safe, ergonomic API to setup events and tasks using the GPIOTE module.

I have an example of how the PAC can be used directly, tested out on the nrf52 dev kit.

I'm up for giving this a go.

I'm guessing it's going to be kind of similar to the gpio module but with more layers. Also I'm wondering about the best way to handle the multiple channels.

It definitely needs a typestate to indicate whether an event pin is configured as pullup or pulldown as a floating pin had me scratching my head for a while.

Does anyone have any hints or implementations they know of in other HAL crates that deal with similar functionality?

closed time in a day

chris-ricketts

issue commentnrf-rs/nrf-hal

Add gpiote module to nrf52-hal-common

https://github.com/nrf-rs/nrf-hal/pull/167 was merged.

chris-ricketts

comment created time in a day

PR opened nrf-rs/nrf-hal

Add a Changelog (+ a few Cargo.toml fixes)

Did I miss anything?

+42 -2

0 comment

9 changed files

pr created time in a day

create barnchjonas-schievink/nrf52-hal

branch : changelog

created branch time in a day

push eventnrf-rs/nrf-hal

Jonas Schievink

commit sha 0a94479d8784ca636ee88b66a9e20a3436a86d77

Fixup GPIOTE

view details

push time in a day

delete branch jonas-schievink/nrf52-hal

delete branch : no-target

delete time in a day

push eventnrf-rs/nrf-hal

Jonas Schievink

commit sha c7f2a856f993a63789a01e9c6ebc814c38e8420c

Remove unnecessary dependencies

view details

Jonas Schievink

commit sha c2298066376afc25213300fa4cb4fb922db0614a

Stop reexporting the PAC under `target` The HAL shims have already called it "pac". Move the common HAL over to that too.

view details

Jonas Schievink

commit sha 619bee72afee7603f502bffc87ddcfa4b4391e76

Merge pull request #172 from jonas-schievink/no-target Stop reexporting the PAC under `target`

view details

push time in a day

PR merged nrf-rs/nrf-hal

Stop reexporting the PAC under `target`

Builds on https://github.com/nrf-rs/nrf-hal/pull/171

Now we only have a single reexport of the PAC, called pac.

+1163 -1229

3 comments

43 changed files

jonas-schievink

pr closed time in a day

push eventnrf-rs/nrf-hal

Henrik Alsér

commit sha a5fea4a920e3a94d4c5fbaab8aa35378fdabacff

Add GPIOTE module

view details

Henrik Alsér

commit sha f65bb1523962ca2c410330881245bda32275aecf

Revert changes to twim, belongs in another branch

view details

Henrik Alsér

commit sha 9e8e1d8c03e28e1ce160055e3b2cc6d5025f562e

Add example with interrupt and PPI usage with onboard buttons and led for nRF52840-DK

view details

Henrik Alsér

commit sha 24a2b59d12810128eb93b4a2c2aa9220965851d2

cargo fmt

view details

Henrik Alsér

commit sha 9f22b12aae3fcecf7b0d56418d8917fa34ba34d3

Hard-code channel numbers

view details

Henrik Alsér

commit sha c27955c1a34616caf504cb848dcdfb543d4e63c4

Consume task output pins

view details

Henrik Alsér

commit sha f918dd23f58cb02845b73a05774dffc56a860e56

Enable interrupt for channel method instead of bool param

view details

Henrik Alsér

commit sha 7ef80f7dfa685933021c11416df6db21740a9c19

Add method to disable interrupt for channel event input pins

view details

Henrik Alsér

commit sha 09db1f3830701c9503ab944e71c1f1c183e34146

Add check if event has been triggered

view details

Henrik Alsér

commit sha b1320f21a7f7b452e0bb2efb39bec33269acce6e

Merge upstream

view details

Henrik Alsér

commit sha 941159997ec6809d0651955a75b949822ca17a45

Add docs

view details

Henrik Alsér

commit sha 3a13b11c4a4bef6ae55b849c1414e483c95f15db

Update demo with more task operations

view details

Jonas Schievink

commit sha 897b5760b7e78b64a9bde7450c840748ea257bc6

Merge pull request #167 from kalkyl/gpiote Add Gpiote module (open for feedback)

view details

push time in a day

PR merged nrf-rs/nrf-hal

Add Gpiote module (open for feedback)

Hi nRF team!

Here's a starting point of a Gpiote module, based on how i've been using it in my projects. Let's discuss a suitable api, at the moment it looks like this:

let gpiote = gpiote::Gpiote::new(p.GPIOTE);

Example how to configure an input pin as an event source for channel 0, triggering on hi-to-low transition and firing the GPIO interrupt: let btn1 = p0.p0_11.into_pullup_input().degrade(); gpiote.channel0().input_pin(&btn1).hi_to_lo().enable_interrupt();

Or using port event: gpiote.port().input_pin(&btn1).low(); gpiote.port().input_pin(&btn3).low(); gpiote.port().enable_interrupt();

In the GPIOTE ISR, check for triggered events like: gpiote.channel0().is_event_triggered() Reset channel events like: gpiote.channel0().reset_events(); Reset port events like gpiote.port().reset_events(); Or globally reset all events like: gpiote.reset_events();

Task output pins are configured like: let led1 = p0.p0_13.into_push_pull_output(Level::High).degrade(); gpiote.channel1().output_pin(led1).init_high();

The assigned output pin is consumed because when an output pin is in task mode, it can no longer be used with the normal gpio api, instead you would use the provided task functions set(), clear() and out().

All configuations available in the registers are implemented aswell as far as i can tell.

Here's a demo using interrupts and PPI with the onboard buttons and leds of the nrf52840-DK: https://github.com/kalkyl/nrf-hal/blob/gpiote/examples/gpiote-demo/src/main.rs

Cheers!

EDIT: Updated with the latest version of the api

+631 -0

2 comments

6 changed files

kalkyl

pr closed time in a day

issue closedrust-lang/rust

Change `next_back()` to `rnext()`

Not really an issue, i just thought it would look better if functions that contained _back in them, should be changed to have an r in front to signify that it does the exact same function, but in reverse. It would be consistent with other functions and keep the same theme going.

Note: Should also apply to nth_back, and anything similar. Note: I know this is probably too much work for very little gain, but i thought it would look better and be more concise. ¯\_(ツ)_/¯

closed time in a day

sHaDoW-54

issue commentrust-lang/rust

Change `next_back()` to `rnext()`

We cannot rename it since that would be a breaking change.

sHaDoW-54

comment created time in a day

pull request commentnrf-rs/nrf-hal

Add Gpiote module (open for feedback)

Looks good, thanks! I'll leave this open for a while to see if anyone else has opinions.

kalkyl

comment created time in 2 days

issue commentrust-lang/rust

Array of tuples containing functions trip on type inference?

I don't think coercions are supposed to work on inner fields

glandium

comment created time in 2 days

pull request commentnrf-rs/nrf-hal

Stop reexporting the PAC under `target`

Mainly because pac does the same thing as target but has a much clearer name. I'm planning to write a changelog so users can be informed of the change there. Since migrating is very mechanical we shouldn't need a migration period.

jonas-schievink

comment created time in 2 days

PR closed rust-lang/rust

Add .circleci/config.yml S-waiting-on-review
+13 -0

1 comment

1 changed file

zxcplm911

pr closed time in 2 days

push eventnrf-rs/nrf-hal

Jonas Schievink

commit sha ca66a9b9845054dce68431efbb1675baeb923f63

Document hal-common as internal We don't support using it directly (nor do we really want to)

view details

push time in 2 days

push eventjonas-schievink/nrf52-hal

Jonas Schievink

commit sha c2298066376afc25213300fa4cb4fb922db0614a

Stop reexporting the PAC under `target` The HAL shims have already called it "pac". Move the common HAL over to that too.

view details

push time in 2 days

PR opened nrf-rs/nrf-hal

Stop reexporting the PAC under `target`

Builds on https://github.com/nrf-rs/nrf-hal/pull/171

Now we only have a single reexport of the PAC, called pac.

+1163 -1247

0 comment

43 changed files

pr created time in 2 days

create barnchjonas-schievink/nrf52-hal

branch : no-target

created branch time in 2 days

PR opened nrf-rs/nrf-hal

Remove unnecessary dependencies

These were just copy-pasta'd all over the HAL shims

+0 -60

0 comment

6 changed files

pr created time in 2 days

create barnchjonas-schievink/nrf52-hal

branch : cull-deps

created branch time in 2 days

release jonas-schievink/adler

v0.2.3

released time in 2 days

release jonas-schievink/adler

v0.2.2

released time in 2 days

release jonas-schievink/adler

v0.2.1

released time in 2 days

release jonas-schievink/adler

v0.2.0

released time in 2 days

Pull request review commentnrf-rs/nrf-hal

Add Gpiote module (open for feedback)

 pub struct GpioteChannelEvent<'a, P: GpioteInputPin> { }  impl<'a, P: GpioteInputPin> GpioteChannelEvent<'_, P> {-    pub fn hi_to_lo(&self, enable_interrupt: bool) {+    pub fn hi_to_lo(&self) -> &Self {         config_channel_event_pin(self.gpiote, self.channel, self.pin, EventPolarity::HiToLo);-        if enable_interrupt {-            self.enable_interrupt();-        }+        self     } -    pub fn lo_to_hi(&self, enable_interrupt: bool) {+    pub fn lo_to_hi(&self) -> &Self {         config_channel_event_pin(self.gpiote, self.channel, self.pin, EventPolarity::LoToHi);-        if enable_interrupt {-            self.enable_interrupt();-        }+        self     } -    pub fn toggle(&self, enable_interrupt: bool) {+    pub fn toggle(&self) -> &Self {         config_channel_event_pin(self.gpiote, self.channel, self.pin, EventPolarity::Toggle);-        if enable_interrupt {-            self.enable_interrupt();-        }+        self     } -    pub fn none(&self, enable_interrupt: bool) {+    pub fn none(&self) -> &Self {         config_channel_event_pin(self.gpiote, self.channel, self.pin, EventPolarity::None);-        if enable_interrupt {-            self.enable_interrupt();-        }+        self     } -    pub fn enable_interrupt(&self) {+    pub fn enable_interrupt(&self) -> &Self {         // Enable interrupt for pin         unsafe {             self.gpiote                 .intenset                 .modify(|r, w| w.bits(r.bits() | self.pin.pin() as u32))         }+        self+    }++    pub fn disable_interrupt(&self) -> &Self {+        // Disable interrupt for pin

This can just be promoted to a doc comment (and above as well)

kalkyl

comment created time in 2 days

push eventjonas-schievink/adler

Jonas Schievink

commit sha 052fb30a8663a976f5eac9c912c653910c064c4e

Release 0.2.3

view details

push time in 2 days

created tagjonas-schievink/adler

tagv0.2.3

Rust crate for computing Adler-32 checksums

created time in 2 days

push eventjonas-schievink/adler

Jonas Schievink

commit sha a875252c946be57223c88b0cc1754bbfb68ac129

Move algorithm into its own module

view details

Jonas Schievink

commit sha b32d526574c0f744ca8b99ead0de6c09484bb094

Update changelog

view details

push time in 2 days

delete branch jonas-schievink/nrf52-hal

delete branch : readme-fix

delete time in 2 days

push eventjonas-schievink/adler

Nathanael Lane

commit sha a1bcf3cd7f50359966a7c3f91f134c47f8815f3e

Refactor checksum algorithm to process 4 bytes at a time, allowing for increased instruction-level parallelism. Benchmarks demonstrate performance improvements upwards of 70% on my development machine.

view details

Nathanael Lane

commit sha b0b72f247b58555a17dd235baf645746205cf76e

fix upstream rustfmt issues

view details

Nathanael Lane

commit sha 082e3cd7dd0c09e4a3c7818926e6bbb1675b771d

add alignment test and coerce intended alignment with repr ([u8; N] is by default aligned to 1, not >=N)

view details

Nathanael Lane

commit sha 4bc0273554e80cbbd48801b199e269179e8e7033

Improve performance for short input slices. Modulo operations are computationally expensive, and small inputs are not able to amortize the cost effectively. The solution is to special-case short slices with a faster algorithm.

view details

Nathanael Lane

commit sha 0cb41e6b8eeacff64e91ce593e0c2afbdc4e4bf1

various improvements: * input-size comparison test * simpler + faster code * place the new implementation behind an "unsafe" feature flag * fix typos

view details

Nathanael Lane

commit sha 6caed1f1bd947238c032dab66961f5dfb57626cb

Remove all unsafe code and related infrastructure, thanks to insight from @jamestwebber. Add "#![forbid(unsafe)]". This greatly simplifies code changes relative to v0.2.2.

view details

Nathanael Lane

commit sha d7f0da274315f36edf78c437f031a53cf49254b7

rustfmt import alphabetization

view details

Jonas Schievink

commit sha 1aad4dbcd42a8fe204dcc1ff723b972814cdb4b3

Merge pull request #2 from NathanaelLane/master Refactor checksum algorithm to process 4 bytes at a time

view details

push time in 2 days

PR merged jonas-schievink/adler

Refactor checksum algorithm to process 4 bytes at a time

...allowing for increased instruction-level parallelism. Benchmarks demonstrate performance improvements upwards of 70% on my development machine.

+115 -13

12 comments

1 changed file

NathanaelLane

pr closed time in 2 days

pull request commentjonas-schievink/adler

Refactor checksum algorithm to process 4 bytes at a time

Great job, this looks really good now!

The 100-Byte benchmark still regresses from 3.3622 GiB/s to 3.1368 GiB/s, but I think that's okay. I've tried the miniz_oxide benchmarks again and found out that they're incredibly noisy (in a way that isn't reflected by the confidence interval printed in the bench results), so I'd say it's fine to ignore them for now.

It's probably best to wait with SIMD until there's a strong motivation for it (it has to improve performance massively), or until there's a more ergonomic way to do SIMD in Rust.

NathanaelLane

comment created time in 2 days

push eventjonas-schievink/nrf52-hal

Jonas Schievink

commit sha be45705479a492c5ca48904af38cfd0a62563f6d

Delete rustfmt.toml It is empty and thus not needed

view details

push time in 2 days

push eventjonas-schievink/nrf52-hal

Jonas Schievink

commit sha fcffd20ce417c7495d2c29feabd4ccf06c4c9587

Delete ,

view details

push time in 2 days

PR opened nrf-rs/nrf-hal

Add nRF51 support to the readme

The nRF52833 also needs to be added before the next release, but the nRF51 HAL is already out...

+2 -1

0 comment

1 changed file

pr created time in 2 days

create barnchjonas-schievink/nrf52-hal

branch : readme-fix

created branch time in 2 days

push eventjonas-schievink/rubble

David Ross

commit sha 577ad1a866763a7db555e5358c571403f5c8af0e

Implement bytes traits for link::data::Header This implements FromBytes and ToBytes for the remaining Header type without these impls, and changes one place where we were writing the Header to a ByteWriter to uses to_bytes rather than to_u16 + LittleEndian::write_u16. Closes https://github.com/jonas-schievink/rubble/issues/24. Signed-off-by: David Ross <David.Ross@wdc.com>

view details

David Ross

commit sha 7066bf527883ed31223c9bf964a47faf1660ea3d

Replace byteorder with std methods There are a few places this ends up more verbose, but it removes a dependency & source of unsafe code. The new-ish std methods cover almost everything we were using byteorder for, in any case. Signed-off-by: David Ross <David.Ross@wdc.com>

view details

Jonas Schievink

commit sha 66b65edaba653280997299e84c2232e38547e7c8

Merge pull request #124 from daboross/remove-byteorder Remove byteorder dependency

view details

push time in 2 days

PR merged jonas-schievink/rubble

Remove byteorder dependency

I included a fix for the last remaining header not implementing FromBytes/ToBytes in this PR, as that made removing byteorder easily. This could also be submitted separately, if you want.

I think the majority of places byteorder was used were more than well covered by the new from/to_le/be_bytes methods on integers. A few places where we're actually using it to read/write to byte slices needed more changes, mainly using copy_from_slice or try_into to convert &[u8] to [u8; N].

Let me know how this looks?

Fixes #24. CC #122.

+29 -29

1 comment

8 changed files

daboross

pr closed time in 2 days

issue closedjonas-schievink/rubble

Implement ToBytes and FromBytes for `Header` types

This currently isn't done mostly because the bytes.rs infrastructure didn't exist when the Header types were created.

closed time in 2 days

jonas-schievink

push eventnrf-rs/nrf-hal

Henrik Alsér

commit sha 906de4b4e88593c38b0ffe295eb4a4025e40336d

Fix Twim hangs on address NACK

view details

Jonas Schievink

commit sha 3291f6ee18badadb33abee985359e99d84882c91

Merge pull request #166 from kalkyl/twim_anack Fix Twim hangs on address NACK

view details

push time in 2 days

PR merged nrf-rs/nrf-hal

Fix Twim hangs on address NACK

Twim would hang if writing or reading if no slave ACKs the address (ie slave is missing or sleeping). This PR adds a check in the lasttx/lastrx wait loops to exit if an address NACK is received and return an AddressNack error. Tested and verified to be working on nRF52840-DK

+53 -10

0 comment

1 changed file

kalkyl

pr closed time in 2 days

create barnchjonas-schievink/nixpkgs

branch : nrf-wat

created branch time in 2 days

more