On Tue, Aug 01, 2023 at 01:13:23PM -0700, Bart Van Assche wrote: > gcc compilers before version 10 cannot do constant-folding for sub-byte > bitfields. This makes the compiler layout tests fail. Hence skip the > layout checks for gcc 9 and before. > > Cc: Arnd Bergmann <arnd@xxxxxxxx> > Cc: Naresh Kamboju <naresh.kamboju@xxxxxxxxxx> > Reported-by: Naresh Kamboju <naresh.kamboju@xxxxxxxxxx> > Suggested-by: Arnd Bergmann <arnd@xxxxxxxx> > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> > --- > drivers/ufs/core/ufshcd.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c > index 23335aaa6a66..875c860bcc05 100644 > --- a/drivers/ufs/core/ufshcd.c > +++ b/drivers/ufs/core/ufshcd.c > @@ -10564,6 +10564,15 @@ static const struct dev_pm_ops ufshcd_wl_pm_ops = { > > static void ufshcd_check_header_layout(void) > { > +#if defined(__GNUC__) && __GNUC__ -0 < 10 clang defines __GNUC__ and it does not sound like it is impacted by this issue? I just built with LLVM 11 through 17 and did not see it. Can this be made more specific? Also, can we use IS_ENABLED() and not rely on the preprocessor? This appears to work for me. if (IS_ENABLED(CONFIG_CC_IS_GCC) && CONFIG_GCC_VERSION < 100000) return; > + /* > + * gcc compilers before version 10 cannot do constant-folding for > + * sub-byte bitfields. Hence skip the layout checks for gcc 9 and > + * before. > + */ > + return; > +#endif > + > BUILD_BUG_ON(((u8 *)&(struct request_desc_header){ > .cci = 3})[0] != 3); >