This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Detection of warning depend on optimisation

Hello arm

I use the arm v9-2019-q4-major toolchain. I compile for the STM32H743 (also seen in the setting)

I compile using the following settings. CFLAG contains compiler settings.

CFLAGS  += -D__FPU_PRESENT
CFLAGS  += -DARM_MATH_CM7
CFLAGS  += -DSTM32
CFLAGS  += -DSTM32H7
CFLAGS  += -DSTM32H743xx
CFLAGS  += -DSTM32H743XIHx
CFLAGS  += -std=c11
CFLAGS  += -mthumb
CFLAGS  += -mcpu=cortex-m7
CFLAGS  += -mfloat-abi=softfp
CFLAGS  += -mfpu=fpv5-d16
CFLAGS  += -g
CFLAGS  += -fmessage-length=0
CFLAGS  += -ffunction-sections
CFLAGS  += -fno-delete-null-pointer-checks

CFLAGS  += -Wstringop-overflow

CFLAGS  += -Werror
CFLAGS  += -Wall
CFLAGS  += -Wextra

CFLAGS  += -Wno-missing-field-initializers
CFLAGS  += -Wdouble-promotion

I wonder why I experience different warnings in my code depending on the optimisation?

I have tried with -O0, -O1, -O2, -O3 and -Os.

I find (relevant) warnings - eg warning of variables that might be used non initialised - with -O1, that is not found when compiling using higher levels?

I experience that the number of warnings found increases with the optimisation level. -O3 finds more warnings that -O1.

Best regards Frank.

Parents
  • I would also expect more warnings the higher the optimisation level. That is why I wondered that I see warnings in -O1 that I haven't seen with -O3 or -Os. The manual however pin-point that some optimisations are only used in -O1 and not in higher levels. That could be the reason why.

    Yes, the GCC manual mention (at least) one warning that is affected by optimisation level - found searching for "optimization level". It is strict-overflow.

Reply
  • I would also expect more warnings the higher the optimisation level. That is why I wondered that I see warnings in -O1 that I haven't seen with -O3 or -Os. The manual however pin-point that some optimisations are only used in -O1 and not in higher levels. That could be the reason why.

    Yes, the GCC manual mention (at least) one warning that is affected by optimisation level - found searching for "optimization level". It is strict-overflow.

Children