Simple eBPF XDP program with some custom code no longer works

This eBPF program does work, get loaded properly:

#![no_std]
#![no_main]

use aya_ebpf::{
    bindings::xdp_action,
    macros::{cgroup_skb, map, xdp},
    maps::{HashMap, PerfEventArray},
    programs::{SkBuffContext, XdpContext}
};
use aya_log_ebpf::info;

//(1)
#[xdp]
pub fn t1(ctx: XdpContext) -> u32 {
    // info!(&ctx, "received a packet");
    xdp_action::XDP_PASS
}

#[panic_handler]
fn panic(_info: &core::panic::PanicInfo) -> ! {
    // loop {}
    unsafe { core::hint::unreachable_unchecked() }
}

But this one no longer does:

//(2)
#[xdp]
pub fn t1(ctx: XdpContext) -> u32 {
    info!(&ctx, "received a packet"); // (!!)
    xdp_action::XDP_PASS
}
// ..........

neither does this:

// (3)
#[xdp]
pub fn t1(ctx: XdpContext) -> u32 {
    match try_t1(ctx) {
        Ok(ret) => ret,
        Err(_) => xdp_action::XDP_ABORTED,
    }
}

#[inline(always)] 
fn try_t1(ctx: XdpContext) -> Result<u32, u32> {
    info!(&ctx, "received a packet");
    Ok(xdp_action::XDP_PASS)
}

// ..........

An error:

Error: Failed to load XDP program: the BPF_PROG_LOAD syscall failed. Verifier output: last insn is not an exit or jmp

What's the matter?