On Mon, Apr 16, 2018 at 1:11 PM, Jakub Jelinek <ja...@redhat.com> wrote: > On Mon, Apr 16, 2018 at 12:50:29PM +0200, Thomas Schwinge wrote: >> > +#define set_feature(f) \ >> > + if (f < 32) features |= (1U << f); else features2 |= (1U << (f - 32)) >> > if (edx & bit_CMOV) >> > - features |= (1 << FEATURE_CMOV); >> > + set_feature (FEATURE_CMOV); >> >> [...]/libgcc/config/i386/cpuinfo.c: In function 'get_available_features': >> [...]/libgcc/config/i386/cpuinfo.c:278:60: warning: left shift count is >> negative [-Wshift-count-negative] >> if (f < 32) features |= (1U << f); else features2 |= (1U << (f - 32)) >> ^~ >> [...]/libgcc/config/i386/cpuinfo.c:281:5: note: in expansion of macro >> 'set_feature' >> set_feature (FEATURE_CMOV); >> ^~~~~~~~~~~ >> [...]/libgcc/config/i386/cpuinfo.c:280:6: warning: suggest explicit >> braces to avoid ambiguous 'else' [-Wdangling-else] >> if (edx & bit_CMOV) >> ^ >> [Many more.] > > Oops, missed these. All of the warnings are false positives (warn on dead > code) or style warning (-Wdangling-else), not actual code bugs. > > The following patch fixes all the warnings without changing code generation, > we are using set_feature with constant arguments only, so everything is > folded properly anyway. > > Ok for trunk? > > 2018-04-16 Jakub Jelinek <ja...@redhat.com> > > PR target/84945 > * config/i386/cpuinfo.c (set_feature): Wrap into do while (0) to avoid > -Wdangling-else warnings. Mask shift counts to avoid > -Wshift-count-negative and -Wshift-count-overflow false positives.
OK. Thanks, Uros. > --- libgcc/config/i386/cpuinfo.c.jj 2018-03-30 20:37:37.683185248 +0200 > +++ libgcc/config/i386/cpuinfo.c 2018-04-16 13:04:45.239490344 +0200 > @@ -275,7 +275,14 @@ get_available_features (unsigned int ecx > } > > #define set_feature(f) \ > - if (f < 32) features |= (1U << f); else features2 |= (1U << (f - 32)) > + do \ > + { \ > + if (f < 32) \ > + features |= (1U << (f & 31)); \ > + else \ > + features2 |= (1U << ((f - 32) & 31)); \ > + } \ > + while (0) > > if (edx & bit_CMOV) > set_feature (FEATURE_CMOV); > > > Jakub