[PATCH] Fix libgcc/config/i386/cpuinfo.c warnings (PR target/84945)
Jakub Jelinek
jakub@redhat.com
Mon Apr 16 11:35:00 GMT 2018
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 <jakub@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.
--- 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
More information about the Gcc-patches
mailing list