1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-17 05:12:57 +01:00

makefiles: Add -fwrapv to CFLAGS

This commit makes overflow of signed integers to behave as expected by at 90%
of the C developers, even though overflow of signed integers are strictly
undefined behavior.

Note: Please do not add code relying on a specific behavior for the overflow of
      signed integers, even though `-fwrpav` will make that code work. This is
      intended to mitigate the risk of bugs in overflow checks being exploited,
      not to encourage adding new bugs.

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30475 for details and see
http://c-faq.com/misc/intovf.html on how to implement overflow checks properly.
This commit is contained in:
Marian Buschsieweke 2019-01-10 15:07:35 +01:00
parent 49a3592f92
commit 01382dc4ad
No known key found for this signature in database
GPG Key ID: 61F64C6599B1539F

View File

@ -19,6 +19,22 @@ ifneq ($(CC_NOCOLOR),1)
OPTIONAL_CFLAGS += -fdiagnostics-color
endif
# Force the C compiler to not ignore signed integer overflows
# Background: In practise signed integers overflow consistently and wrap
# around to the lowest number. But this is undefined behaviour.
# Branches that rely on this undefined behaviour will be silently
# optimized out. For details, have a look at
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30475
# Note: Please do not add new code that relies on this undefined
# behaviour, even though this flag makes your code work. There are
# safe ways to check for signed integer overflow.
CFLAGS += -fwrapv
# Enable warnings for code relying on signed integers to overflow correctly
# (see above for details).
# Note: This warning is sadly not reliable, thus -fwrapv cannot be
# dropped in favor of this
CFLAGS += -Wstrict-overflow
# Fast-out on old style function definitions.
# They cause unreadable error compiler errors on missing semicolons.
# Worse yet they hide errors by accepting wildcard argument types.