[INFO] fetching crate gihex-hc-sr04 0.1.5... [INFO] testing gihex-hc-sr04-0.1.5 against beta-2025-09-21 for beta-1.91-3 [INFO] extracting crate gihex-hc-sr04 0.1.5 into /workspace/builds/worker-6-tc2/source [INFO] removed /workspace/builds/worker-6-tc2/source/.cargo/config [INFO] started tweaking crates.io crate gihex-hc-sr04 0.1.5 [INFO] removed 0 missing examples [INFO] finished tweaking crates.io crate gihex-hc-sr04 0.1.5 [INFO] tweaked toml for crates.io crate gihex-hc-sr04 0.1.5 written to /workspace/builds/worker-6-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate gihex-hc-sr04 0.1.5 on toolchain beta-2025-09-21 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2025-09-21" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate crates.io crate gihex-hc-sr04 0.1.5 already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+beta-2025-09-21" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2025-09-21" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] cde6978bf866ba8fce36ed3008eda8874f6ba5f9c0316b94cd9ad6bea9e7ee87 [INFO] running `Command { std: "docker" "start" "-a" "cde6978bf866ba8fce36ed3008eda8874f6ba5f9c0316b94cd9ad6bea9e7ee87", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "cde6978bf866ba8fce36ed3008eda8874f6ba5f9c0316b94cd9ad6bea9e7ee87", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "cde6978bf866ba8fce36ed3008eda8874f6ba5f9c0316b94cd9ad6bea9e7ee87", kill_on_drop: false }` [INFO] [stdout] cde6978bf866ba8fce36ed3008eda8874f6ba5f9c0316b94cd9ad6bea9e7ee87 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2025-09-21" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 9bacf512a0885957c232d79b495d95552dff49811dccd6531af07ee90bd9891f [INFO] running `Command { std: "docker" "start" "-a" "9bacf512a0885957c232d79b495d95552dff49811dccd6531af07ee90bd9891f", kill_on_drop: false }` [INFO] [stderr] Compiling nb v0.1.3 [INFO] [stderr] Compiling embedded-hal v0.2.7 [INFO] [stderr] Compiling gihex-hc-sr04 v0.1.5 (/opt/rustwide/workdir) [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.33s [INFO] running `Command { std: "docker" "inspect" "9bacf512a0885957c232d79b495d95552dff49811dccd6531af07ee90bd9891f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "9bacf512a0885957c232d79b495d95552dff49811dccd6531af07ee90bd9891f", kill_on_drop: false }` [INFO] [stdout] 9bacf512a0885957c232d79b495d95552dff49811dccd6531af07ee90bd9891f [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+beta-2025-09-21" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 07251950054fc62ae4d947a3c3331165391b52fde36178a7c5ceb4a3c210d31f [INFO] running `Command { std: "docker" "start" "-a" "07251950054fc62ae4d947a3c3331165391b52fde36178a7c5ceb4a3c210d31f", kill_on_drop: false }` [INFO] [stderr] Compiling cortex-m v0.7.7 [INFO] [stderr] Compiling critical-section v1.1.2 [INFO] [stderr] Compiling cortex-m-rt v0.7.3 [INFO] [stderr] Compiling atomic-polyfill v1.0.3 [INFO] [stderr] Compiling stm32-usbd v0.6.0 [INFO] [stderr] Compiling hashbrown v0.14.2 [INFO] [stderr] Compiling equivalent v1.0.1 [INFO] [stderr] Compiling stm32f1 v0.15.1 [INFO] [stderr] Compiling bare-metal v1.0.0 [INFO] [stderr] Compiling gcd v2.3.0 [INFO] [stderr] Compiling cortex-m-semihosting v0.5.0 [INFO] [stderr] Compiling syn v1.0.109 [INFO] [stderr] Compiling proc-macro-error-attr v1.0.4 [INFO] [stderr] Compiling rtic v2.0.1 [INFO] [stderr] Compiling usb-device v0.2.9 [INFO] [stderr] Compiling bxcan v0.7.0 [INFO] [stderr] Compiling embedded-dma v0.2.0 [INFO] [stderr] Compiling fugit v0.3.7 [INFO] [stderr] Compiling rtic-core v1.0.0 [INFO] [stderr] Compiling fugit-timer v0.1.3 [INFO] [stderr] Compiling panic-semihosting v0.6.0 [INFO] [stderr] Compiling indexmap v2.1.0 [INFO] [stderr] Compiling proc-macro-error v1.0.4 [INFO] [stderr] Compiling cortex-m-rt-macros v0.7.0 [INFO] [stderr] Compiling rtic-macros v2.0.1 [INFO] [stderr] Compiling stm32f1xx-hal v0.10.0 [INFO] [stderr] Compiling gihex-hc-sr04 v0.1.5 (/opt/rustwide/workdir) [INFO] [stdout] warning: creating a mutable reference to mutable static [INFO] [stdout] --> examples/basic.rs:24:35 [INFO] [stdout] | [INFO] [stdout] 24 | let echo_pin = unsafe { &mut *ECHO_PIN.as_mut_ptr() }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static [INFO] [stdout] | [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives [INFO] [stdout] = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: creating a mutable reference to mutable static [INFO] [stdout] --> examples/basic.rs:25:33 [INFO] [stdout] | [INFO] [stdout] 25 | let sensor = unsafe { &mut *SENSOR.as_mut_ptr() }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static [INFO] [stdout] | [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: creating a mutable reference to mutable static [INFO] [stdout] --> examples/basic.rs:50:35 [INFO] [stdout] | [INFO] [stdout] 50 | let echo_pin = unsafe { &mut *ECHO_PIN.as_mut_ptr() }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static [INFO] [stdout] | [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: creating a mutable reference to mutable static [INFO] [stdout] --> examples/basic.rs:64:33 [INFO] [stdout] | [INFO] [stdout] 64 | let sensor = unsafe { &mut *SENSOR.as_mut_ptr() }; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static [INFO] [stdout] | [INFO] [stdout] = note: for more information, see [INFO] [stdout] = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0412]: cannot find type `Peripherals` in module `rtic::export` [INFO] [stdout] --> examples/use_rtic.rs:27:1 [INFO] [stdout] | [INFO] [stdout] 27 | #[rtic::app(device=stm32f1xx_hal::pac)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in `rtic::export` [INFO] [stdout] | [INFO] [stdout] = note: this error originates in the attribute macro `rtic::app` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] help: consider importing one of these structs [INFO] [stdout] | [INFO] [stdout] 30 + use crate::app::you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml::Peripherals; [INFO] [stdout] | [INFO] [stdout] 30 + use cortex_m::Peripherals; [INFO] [stdout] | [INFO] [stdout] 30 + use stm32f1xx_hal::pac::Peripherals; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0425]: cannot find function `run` in module `rtic::export` [INFO] [stdout] --> examples/use_rtic.rs:27:1 [INFO] [stdout] | [INFO] [stdout] 27 | #[rtic::app(device=stm32f1xx_hal::pac)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in `rtic::export` [INFO] [stdout] | [INFO] [stdout] = note: this error originates in the attribute macro `rtic::app` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0425]: cannot find function `lock` in module `rtic::export` [INFO] [stdout] --> examples/use_rtic.rs:27:1 [INFO] [stdout] | [INFO] [stdout] 27 | #[rtic::app(device=stm32f1xx_hal::pac)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in `rtic::export` [INFO] [stdout] | [INFO] [stdout] = note: this error originates in the attribute macro `rtic::app` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: failed to resolve: could not find `interrupt` in `export` [INFO] [stdout] --> examples/use_rtic.rs:27:1 [INFO] [stdout] | [INFO] [stdout] 27 | #[rtic::app(device=stm32f1xx_hal::pac)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `interrupt` in `export` [INFO] [stdout] | [INFO] [stdout] = note: this error originates in the attribute macro `rtic::app` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] help: consider importing one of these enums [INFO] [stdout] | [INFO] [stdout] 30 + use crate::app::you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml::interrupt; [INFO] [stdout] | [INFO] [stdout] 30 + use stm32f1xx_hal::pac::interrupt; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0433]: failed to resolve: could not find `Peripherals` in `export` [INFO] [stdout] --> examples/use_rtic.rs:27:1 [INFO] [stdout] | [INFO] [stdout] 27 | #[rtic::app(device=stm32f1xx_hal::pac)] [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ could not find `Peripherals` in `export` [INFO] [stdout] | [INFO] [stdout] = note: this error originates in the attribute macro `rtic::app` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] help: consider importing one of these structs [INFO] [stdout] | [INFO] [stdout] 30 + use crate::app::you_must_enable_the_rt_feature_for_the_pac_in_your_cargo_toml::Peripherals; [INFO] [stdout] | [INFO] [stdout] 30 + use cortex_m::Peripherals; [INFO] [stdout] | [INFO] [stdout] 30 + use stm32f1xx_hal::pac::Peripherals; [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0412, E0425, E0433. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0412`. [INFO] [stdout] [INFO] [stderr] error: could not compile `gihex-hc-sr04` (example "use_rtic") due to 5 previous errors [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stdout] error: linking with `cc` failed: exit status: 1 [INFO] [stdout] | [INFO] [stdout] = note: "cc" "-m64" "/tmp/rustc2G7tRe/symbols.o" "<2 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "/opt/rustwide/target/debug/deps/{libstm32f1xx_hal-c4f9c454c28ef1c4,libfugit_timer-279ec1ac4a50bee1,libbxcan-bfe66d1bdfc7b8d9,libbitflags-dde12b0d7d495b50,libstm32_usbd-0ce733b9d1ef8ef6,libusb_device-622b9963c7c13fac,libfugit-4377188d61df4169,libgcd-df1e9b5aa49a819b,libembedded_dma-fb3bf0e45cb71a7a,libstable_deref_trait-932cd180c9d6b0f0,libstm32f1-8bd8b3f71dc917f9,libcortex_m_rt-1cbdc9f5d8fd4818,libpanic_semihosting-e7dd40646a49c92c}.rlib" "/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libstd-*,libpanic_unwind-*,libobject-*,libmemchr-*,libaddr2line-*,libgimli-*,libcfg_if-*,librustc_demangle-*,libstd_detect-*,libhashbrown-*,librustc_std_workspace_alloc-*,libminiz_oxide-*,libadler2-*,libunwind-*,liblibc-*,librustc_std_workspace_core-*,liballoc-*}.rlib" "/opt/rustwide/target/debug/deps/{libgihex_hc_sr04-04fedac48db1204e,libnum_traits-96da109a125093ce,libcortex_m_semihosting-bcac426c7cb3304b,libcortex_m-69246f2712b3fac3,libembedded_hal-f37092df6fe13159,libvoid-6336667ff9ef9cc5,libnb-574cd195fbe064b0,libnb-8256a674579b77d4,libvolatile_register-6ecd5712b45a5657,libvcell-0eaad7c905f5a0e7,libbare_metal-4c035d36fb109858}.rlib" "/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libcore-*,libcompiler_builtins-*}.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-L" "/tmp/rustc2G7tRe/raw-dylibs" "-B/lib/rustlib/x86_64-unknown-linux-gnu/bin/gcc-ld" "-fuse-ld=lld" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/opt/rustwide/target/debug/build/cortex-m-rt-660a186c047eb77a/out" "-L" "/opt/rustwide/target/debug/build/stm32f1-21459c2288615c15/out" "-L" "/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/opt/rustwide/target/debug/examples/basic-70e198aafa9be1f3" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-nodefaultlibs" [INFO] [stdout] = note: some arguments are omitted. use `--verbose` to show all linker arguments [INFO] [stdout] = note: rust-lld: error: undefined symbol: __primask_r [INFO] [stdout] >>> referenced by call_asm.rs:19 (/opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/cortex-m-0.7.7/src/call_asm.rs:19) [INFO] [stdout] >>> /opt/rustwide/target/debug/examples/basic-70e198aafa9be1f3.basic.50cb6fe6a0ed8f6-cgu.0.rcgu.o:(cortex_m::register::primask::read::hc6585545ab668035) [INFO] [stdout] >>> referenced by call_asm.rs:19 (/opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/cortex-m-0.7.7/src/call_asm.rs:19) [INFO] [stdout] >>> cortex_m_semihosting-bcac426c7cb3304b.cortex_m_semihosting.55d3ba5e0b3185bd-cgu.0.rcgu.o:(cortex_m::register::primask::read::h56ffd344c117f371) in archive /opt/rustwide/target/debug/deps/libcortex_m_semihosting-bcac426c7cb3304b.rlib [INFO] [stdout] [INFO] [stdout] rust-lld: error: undefined symbol: __cpsie [INFO] [stdout] >>> referenced by call_asm.rs:19 (/opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/cortex-m-0.7.7/src/call_asm.rs:19) [INFO] [stdout] >>> /opt/rustwide/target/debug/examples/basic-70e198aafa9be1f3.basic.50cb6fe6a0ed8f6-cgu.0.rcgu.o:(cortex_m::interrupt::enable::hc3f2c6e9ca49e563) [INFO] [stdout] >>> referenced by call_asm.rs:19 (/opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/cortex-m-0.7.7/src/call_asm.rs:19) [INFO] [stdout] >>> cortex_m_semihosting-bcac426c7cb3304b.cortex_m_semihosting.55d3ba5e0b3185bd-cgu.0.rcgu.o:(cortex_m::interrupt::enable::h4c32e63c810ef497) in archive /opt/rustwide/target/debug/deps/libcortex_m_semihosting-bcac426c7cb3304b.rlib [INFO] [stdout] [INFO] [stdout] rust-lld: error: undefined symbol: __cpsid [INFO] [stdout] >>> referenced by call_asm.rs:19 (/opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/cortex-m-0.7.7/src/call_asm.rs:19) [INFO] [stdout] >>> /opt/rustwide/target/debug/examples/basic-70e198aafa9be1f3.basic.50cb6fe6a0ed8f6-cgu.0.rcgu.o:(cortex_m::interrupt::disable::h2dd1cb14204f8724) [INFO] [stdout] >>> referenced by call_asm.rs:19 (/opt/rustwide/cargo-home/registry/src/index.crates.io-1949cf8c6b5b557f/cortex-m-0.7.7/src/call_asm.rs:19) [INFO] [stdout] >>> cortex_m_semihosting-bcac426c7cb3304b.cortex_m_semihosting.55d3ba5e0b3185bd-cgu.0.rcgu.o:(cortex_m::interrupt::disable::h36a7e388f77dbd98) in archive /opt/rustwide/target/debug/deps/libcortex_m_semihosting-bcac426c7cb3304b.rlib [INFO] [stdout] collect2: error: ld returned 1 exit status [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] error: could not compile `gihex-hc-sr04` (example "basic") due to 1 previous error; 4 warnings emitted [INFO] running `Command { std: "docker" "inspect" "07251950054fc62ae4d947a3c3331165391b52fde36178a7c5ceb4a3c210d31f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "07251950054fc62ae4d947a3c3331165391b52fde36178a7c5ceb4a3c210d31f", kill_on_drop: false }` [INFO] [stdout] 07251950054fc62ae4d947a3c3331165391b52fde36178a7c5ceb4a3c210d31f