Skip to content

AVR: u32 and u64 behaves like u16 and u32 #83281

Closed
rust-lang/compiler-builtins
#462
@ThisIsRex

Description

@ThisIsRex

I found out that i32 and u32 behaves like i16 and u16
And i64 and u64 like i32 and u32

I wrote the following code to represent the problem:

let mut counter_u32 = 0u32;
let mut counter_u64 = 0u64;
let mut counter_u64_2 = 0u64;

loop {
	delay_ms(1000);

	counter_u16 = counter_u16.wrapping_add(10000);
	counter_u32 = counter_u32.wrapping_add(10000);
	counter_u64 = counter_u64.wrapping_add(10000);
	counter_u64_2 = counter_u64_2.wrapping_add(1_000_000_000);

	ufmt::uwriteln!(&mut serial, "u16: {}", counter_u16).void_unwrap();
	ufmt::uwriteln!(&mut serial, "u32: {}", counter_u32).void_unwrap(); //overflow after 65535
	ufmt::uwriteln!(&mut serial, "u64>2^16?: {}", counter_u64 > 65535).void_unwrap();
	ufmt::uwriteln!(&mut serial, "u64>2^32?: {}", counter_u64 > 4294967295).void_unwrap(); //overflow after 4294967295

        //FLASH ERROR
        ufmt::uwriteln!(&mut serial, "u64: {}", counter_u64).void_unwrap();
}

Also if i'll write the code for displaying u64, avr-gcc can't flash the .elf file:

error: linking with `avr-gcc` failed: exit code: 1
  |
  = note: "avr-gcc" "-mmcu=atmega328p" "-Wl,--as-needed" "-L" "C:\\Users\\Admin\\.rustup\\toolchains\\nightly-2021-01-07-x86_64-pc-windows-msvc\\lib\\rustlib\\avr-atmega328p\\lib" "O:\\R\\Coding\\Rust\\test-proj\\target\\avr-atmega328p\\debug\\deps\\test-proj-6349af4f4221cee8.panic_halt-db131e4b002c16b4.panic_halt.7laydq1v-cgu.0.rcgu.o.rcgu.o" "-o" "O:\\R\\Coding\\Rust\\test-proj\\target\\avr-atmega328p\\debug\\deps\\test-proj-6349af4f4221cee8.elf" "-Wl,--gc-sections" "-L" "O:\\R\\Coding\\Rust\\test-proj\\target\\avr-atmega328p\\debug\\deps" "-L" "O:\\R\\Coding\\Rust\\test-proj\\target\\debug\\deps" "-L" "C:\\Users\\Admin\\.rustup\\toolchains\\nightly-2021-01-07-x86_64-pc-windows-msvc\\lib\\rustlib\\avr-atmega328p\\lib" "-Wl,--start-group" "-Wl,--end-group" "-Wl,-Bstatic" "O:\\R\\Coding\\Rust\\test-proj\\target\\avr-atmega328p\\debug\\deps\\libcompiler_builtins-e902a06b00d14d7b.rlib" "-Wl,-Bdynamic" "-lgcc"
  = note: O:\R\Coding\Rust\test-proj\target\avr-atmega328p\debug\deps\libcompiler_builtins-e902a06b00d14d7b.rlib(compiler_builtins-e902a06b00d14d7b.compiler_builtins.6kkuomye-cgu.7.rcgu.o): In function `compiler_builtins::int::shift::Ashl::ashl::h9dce3f4bd92dda5f':
          C:\Users\Admin\.cargo\registry\src\github.tiyicn.workers.dev-1ecc6299db9ec823\compiler_builtins-0.1.36\src\int\shift.rs:(.text._ZN17compiler_builtins3int5shift4Ashl4ashl17h9dce3f4bd92dda5fE+0x150): undefined reference to `core::panicking::panic::hf53d0fffb6d21a9a'
          O:\R\Coding\Rust\test-proj\target\avr-atmega328p\debug\deps\libcompiler_builtins-e902a06b00d14d7b.rlib(compiler_builtins-e902a06b00d14d7b.compiler_builtins.6kkuomye-cgu.7.rcgu.o): In function `compiler_builtins::int::shift::Ashl::ashl::hceca1513a0a8cd5c':
          C:\Users\Admin\.cargo\registry\src\github.tiyicn.workers.dev-1ecc6299db9ec823\compiler_builtins-0.1.36\src\int\shift.rs:(.text._ZN17compiler_builtins3int5shift4Ashl4ashl17hceca1513a0a8cd5cE+0x198): undefined reference to `core::panicking::panic::hf53d0fffb6d21a9a'
          O:\R\Coding\Rust\test-proj\target\avr-atmega328p\debug\deps\libcompiler_builtins-e902a06b00d14d7b.rlib(compiler_builtins-e902a06b00d14d7b.compiler_builtins.6kkuomye-cgu.7.rcgu.o): In function `compiler_builtins::int::shift::Lshr::lshr::h6706166a532fb8de':
          C:\Users\Admin\.cargo\registry\src\github.tiyicn.workers.dev-1ecc6299db9ec823\compiler_builtins-0.1.36\src\int\shift.rs:(.text._ZN17compiler_builtins3int5shift4Lshr4lshr17h6706166a532fb8deE+0x1f8): undefined reference to `core::panicking::panic::hf53d0fffb6d21a9a'
          O:\R\Coding\Rust\test-proj\target\avr-atmega328p\debug\deps\libcompiler_builtins-e902a06b00d14d7b.rlib(compiler_builtins-e902a06b00d14d7b.compiler_builtins.6kkuomye-cgu.1.rcgu.o): In function `compiler_builtins::int::specialized_div_rem::u64_div_rem::h60f8b0912293273a':
          C:\Users\Admin\.cargo\registry\src\github.tiyicn.workers.dev-1ecc6299db9ec823\compiler_builtins-0.1.36\src\int\specialized_div_rem\delegate.rs:(.text._ZN17compiler_builtins3int19specialized_div_rem11u64_div_rem17h60f8b0912293273aE+0x125c): undefined reference to `core::panicking::panic::hf53d0fffb6d21a9a'
          O:\R\Coding\Rust\test-proj\target\avr-atmega328p\debug\deps\libcompiler_builtins-e902a06b00d14d7b.rlib(compiler_builtins-e902a06b00d14d7b.compiler_builtins.6kkuomye-cgu.1.rcgu.o): In function `compiler_builtins::int::specialized_div_rem::u32_div_rem::h9023690cd40b9b7f':
          C:\Users\Admin\.cargo\registry\src\github.tiyicn.workers.dev-1ecc6299db9ec823\compiler_builtins-0.1.36\src\int\specialized_div_rem\norm_shift.rs:(.text._ZN17compiler_builtins3int19specialized_div_rem11u32_div_rem17h9023690cd40b9b7fE+0x718): undefined reference to `core::panicking::panic::hf53d0fffb6d21a9a'
          collect2.exe: error: ld returned 1 exit status


error: aborting due to previous error; 38 warnings emitted

error: could not compile `test-proj`

I use nightly-2021-01-07 version because a newer one fails with Not supported instr error

Activity

added
O-AVRTarget: AVR processors (ATtiny, ATmega, etc.)
requires-nightlyThis issue requires a nightly compiler in some way.
on Mar 18, 2021
Rahix

Rahix commented on Mar 24, 2021

@Rahix

avr-gcc can't flash the .elf file

More precisely, it is failing to link the executable. This is a known problem between compiler-builtins and cargo build-std.

drmorr0

drmorr0 commented on Oct 30, 2021

@drmorr0
Contributor

I'm pretty sure this is a duplicate of #82380

Patryk27

Patryk27 commented on Dec 21, 2021

@Patryk27
Contributor

Seems like a duplicate of #82380, as in #82380 (comment) helps to avoid the linker issue and seems to generate a meaningful code; as for the overflow, unfortunately it's a problem in ufmt.

added a commit that references this issue on May 15, 2022
added a commit that references this issue on May 17, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.O-AVRTarget: AVR processors (ATtiny, ATmega, etc.)requires-nightlyThis issue requires a nightly compiler in some way.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @jonas-schievink@drmorr0@Patryk27@Rahix@ThisIsRex

      Issue actions

        AVR: u32 and u64 behaves like u16 and u32 · Issue #83281 · rust-lang/rust