On Tue, 2018-12-11 at 19:06 +0800, Gao Xiang wrote: > Hi Aaron, > > On 2018/12/11 18:54, Aaron Strahlberger wrote: > > Fix of ERROR: Macros with complex values should be enclosed in parentheses > > from checkpatch.pl [] > > diff --git a/drivers/staging/erofs/erofs_fs.h b/drivers/staging/erofs/erofs_fs.h [] > > @@ -38,9 +38,9 @@ struct erofs_super_block { > > /* 80 */__u8 reserved2[48]; /* 128 bytes */ > > } __packed; > > > > -#define __EROFS_BIT(_prefix, _cur, _pre) enum { \ > > +#define __EROFS_BIT(_prefix, _cur, _pre) (enum { \ > > _prefix ## _cur ## _BIT = _prefix ## _pre ## _BIT + \ > > - _prefix ## _pre ## _BITS } > > + _prefix ## _pre ## _BITS }) > > It seems not the valid C, here is the compiler error: > > ... > > In file included from drivers/staging/erofs/internal.h:25:0, > from drivers/staging/erofs/xattr.h:16, > from drivers/staging/erofs/xattr.c:14: > drivers/staging/erofs/erofs_fs.h:41:43: error: expected identifier or ‘(’ before ‘enum’ > #define __EROFS_BIT(_prefix, _cur, _pre) (enum { \ > ^ > drivers/staging/erofs/erofs_fs.h:65:1: note: in expansion of macro ‘__EROFS_BIT’ > __EROFS_BIT(EROFS_I_, DATA_MAPPING, VERSION); > ^~~~~~~~~~~ > make[3]: *** [scripts/Makefile.build:292: drivers/staging/erofs/xattr.o] Error 1 > > ... > > > the __EROFS_BIT marco is used to define yyy_BIT according to xxx_BIT + xxx_BITS for cascade, eg. > > __EROFS_BIT(EROFS_I_, DATA_MAPPING, VERSION); > it will defines EROFS_I_DATA_MAPPING_BIT = EROFS_I_VERSION_BIT + EROFS_I_VERSION_BITS; > > __EROFS_BIT(EROFS_I_, FEATURE2, DATA_MAPPING); > it will defines EROFS_I_FEATURE2_BIT = EROFS_I_DATA_MAPPING_BIT + EROFS_I_DATA_MAPPING_BITS; This macro is used only once and is merely obfuscation for that one use. Please remove the macro and expand it in the one place it is used. _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel