On 1/19/21 7:43 AM, Bruno Haible wrote: > Adhemerval Zanella wrote: >> -# if (__GNUC__ >= 7) || (__clang_major__ >= 10) >> +# if (__GNUC__ >= 7) || (defined __clang_major__ &&__clang_major__ >= 10) > I would write it as: > > +# if (__GNUC__ >= 7) || (defined __clang__ && __clang_major__ >= 10) This line should be used only if _LIBC is defined, so we can simplify it to just "#if __GNUC__ >= 7" and thus not worry about Clang. I see that Gnulib wasn't consistent about this, so I installed the attached patch to Gnulib to fix the issue here and elsewhere. The idea is that the Gnulib regex_internal.h can be copied back to glibc, and that the other uses in Gnulib should be similar. On 1/19/21 6:43 AM, Adhemerval Zanella wrote: > Paul, this seemed to a common pattern scatter on multiple file in gnulib. > Wouldn't be better to consolidate it on cdefs.h? We could append something like the following to cdefs.h, and switch to __attribute_fallthrough__ for modules shared between the two systems. Is that something you'd like to pursue? (We should also sync Gnulib cdefs.h back to glibc of course.) #if defined __STDC_VERSION__ && 201710L < __STDC_VERSION__ # define __attribute_fallthrough__ [[__fallthrough__]] #elif __GNUC_PREREQ (7, 0) || __glibc_has_attribute (__fallthrough__) # define __attribute_fallthrough__ __attribute__ ((__fallthrough__)) #else # define __attribute_fallthrough__ ((void) 0) #endif