Message ID | 20201226175129.9621-3-luc.vanoostenryck@gmail.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | support __packed struct | expand |
On 26/12/2020 17:51, Luc Van Oostenryck wrote: > There is more than one complexity in the evaluation of enums. > > Add a test for enums with 'exotic' values non-covered in other tests. s/non-covered/not covered/ ATB, Ramsay Jones > > Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> > --- > validation/enum-type-exotic.c | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > create mode 100644 validation/enum-type-exotic.c > > diff --git a/validation/enum-type-exotic.c b/validation/enum-type-exotic.c > new file mode 100644 > index 000000000000..a17ca0ad48ef > --- /dev/null > +++ b/validation/enum-type-exotic.c > @@ -0,0 +1,28 @@ > +enum foobar { > + C = (unsigned char)0, > + L = 1L, > +}; > + > +unsigned int foo(void); > +unsigned int foo(void) > +{ > +#ifdef __CHECKER__ > + _Static_assert([typeof(C)] == [enum foobar], "enum type"); > + _Static_assert([typeof(C)] != [unsigned char], "char type"); > +#endif > + > + typeof(C) v = ~0; > + return v; > +} > + > +/* > + * check-name: enum-type-exotic > + * check-description: > + * GCC type's for C is 'int' or maybe 'unsigned int' > + * but certainly not 'unsigned char' like here. > + * check-command: test-linearize -Wno-decl $file > + * check-known-to-fail > + * > + * check-output-ignore > + * check-output-excludes: ret\\.32 *\\$255 > + */ >
On Mon, Dec 28, 2020 at 04:10:06PM +0000, Ramsay Jones wrote: > > > On 26/12/2020 17:51, Luc Van Oostenryck wrote: > > There is more than one complexity in the evaluation of enums. > > > > Add a test for enums with 'exotic' values non-covered in other tests. > > s/non-covered/not covered/ Yes, indeed. Thanks. -- Luc
diff --git a/validation/enum-type-exotic.c b/validation/enum-type-exotic.c new file mode 100644 index 000000000000..a17ca0ad48ef --- /dev/null +++ b/validation/enum-type-exotic.c @@ -0,0 +1,28 @@ +enum foobar { + C = (unsigned char)0, + L = 1L, +}; + +unsigned int foo(void); +unsigned int foo(void) +{ +#ifdef __CHECKER__ + _Static_assert([typeof(C)] == [enum foobar], "enum type"); + _Static_assert([typeof(C)] != [unsigned char], "char type"); +#endif + + typeof(C) v = ~0; + return v; +} + +/* + * check-name: enum-type-exotic + * check-description: + * GCC type's for C is 'int' or maybe 'unsigned int' + * but certainly not 'unsigned char' like here. + * check-command: test-linearize -Wno-decl $file + * check-known-to-fail + * + * check-output-ignore + * check-output-excludes: ret\\.32 *\\$255 + */
There is more than one complexity in the evaluation of enums. Add a test for enums with 'exotic' values non-covered in other tests. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- validation/enum-type-exotic.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 validation/enum-type-exotic.c