@TickleSteve below me: "without this, removal is only performed within the compilation-unit"
Not quite. When you link to a static library (.a) with lots of .o object files in it, only those object files will be linked that are actually used by your program.
I first learned about this when I looked at the source of dietlibc, and wondered about every function being in a separate file. That enables the aforementioned trivial optimization, even without -flto.