On Monday, June 6th, 2022 at 9:42 PM, Ben Boeckel <ben.boec...@kitware.com> wrote: > > Based on Jakub's and Yair's comments I created a new attribute "inrange". > > Inrage takes three arguments, pos min and max. > > Pos being the argument position in the function, and min and max defines the > > range of valid integer. Both min and max are inclusive and work with enums. > > Warnings are enabled with the new flag: "-Winrange". > > > Is this something that could be applied to variables or types (I've not > much experience with GCC attribute internal mechanisms, so maybe not)?
I took a closer look at it and looks like it can be applied. So trying to compile this: ``` typedef int __attribute__((inrange(0, 100))) percentage_t; int main() { int percentage __attribute__((inrange(0, 100))) = -1; percentage_t per __attribute__((inrange(0, 100))) = -1; } ``` Would print out something like this: foo.c: In function 'main': foo.c:3:59: warning: inrange variable 'percentage' requires integer in rage of 0..100 [-Winrange] 3 | int percentage __attribute__((inrange(0, 100))) = -1; | ^ foo.c:4:61: warning: inrange variable 'per' requires integer in rage of 0..100 [-Winrange] 4 | percentage_t per __attribute__((inrange(0, 100))) = -1; | Miika