Search code examples
c++g++compiler-flags

Variables optimized out with g++ and the -Og option


When I compile my C++ program with g++ using the -Og option I see variables that are <optimized out>, and also the current line sometimes skips around. Is this behaviour expected at this optimization level, or do I have some problem? The man page of gcc says:

-Og

Optimize debugging experience. -Og enables optimizations that do not interfere with debugging. It should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience.

hence I did not expect this behaviour. On my system I have g++ version 4.9.2 and gdb version 7.7.1.


Solution

  • This is normal behaviour when compiling with the -Og option. At this optimisation level the compiler is allowed to optimize as long as it adheres to the as-if rule. This could include the removal of variables (or conversion to constants), as well as the dropping of unused functions.

    The recommendation is either to get used to the skipping or to compile with the -O0option.