13

I want to use https://rust.godbolt.org to see the assembly output of this function:

fn add(a: u8, b: u8) -> u8 {
    a + b
}

Pasting this on the website works fine, but shows a lot of assembly. This is not unsurprising, given that rustc compiles my code in debug mode by default. When I compile in release mode by passing -O to the compiler, there is no output at all!

What am I doing wrong? Why does the Rust compiler remove everything in release mode?

Shepmaster
  • 388,571
  • 95
  • 1,107
  • 1,366
Lukas Kalbertodt
  • 79,749
  • 26
  • 255
  • 305

1 Answers1

24

Godbolt compiles your Rust code as a library crate by passing --crate-type=lib to the compiler. And code from a library is only useful if it's public. So in your case, your add() function is private and is removed from the compiler completely. The solution is rather simple:

Make your function public by adding pub to it. Now the compiler won't remove the function, since it is part of the public interface of your library.

Lukas Kalbertodt
  • 79,749
  • 26
  • 255
  • 305