diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-06-27 17:52:42 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-06-27 17:52:42 +0000 |
commit | ac782f9e9ab0a39a3054e4c97653fafa8ea47a62 (patch) | |
tree | 0afe5ff050d761b017bef5fecf09fe5975f9b6c1 /elf | |
parent | e4043b84c49e1cf9bcf1e8320233343ecc34f8eb (diff) | |
download | glibc-ac782f9e9ab0a39a3054e4c97653fafa8ea47a62.tar glibc-ac782f9e9ab0a39a3054e4c97653fafa8ea47a62.tar.gz glibc-ac782f9e9ab0a39a3054e4c97653fafa8ea47a62.tar.bz2 glibc-ac782f9e9ab0a39a3054e4c97653fafa8ea47a62.zip |
Fix elf/loadtest.c build with GCC 8.
Building the testsuite with current GCC mainline fails with:
loadtest.c: In function 'main':
loadtest.c:76:3: error: macro expands to multiple statements [-Werror=multistatement-macros]
for (map = MAPS; map != NULL; map = map->l_next) \
^
loadtest.c:165:2: note: in expansion of macro 'OUT'
OUT;
^~~
loadtest.c:164:7: note: some parts of macro expansion are not guarded by this 'if' clause
if (debug)
^~
This seems like a genuine bug, although fairly harmless; it means the
fflush call in the OUT macro is unconditional instead of being inside
the conditional as presumably intended. This patch makes this macro
use do { } while (0) to avoid the problem.
Tested for x86_64 (testsuite), and with build-many-glibcs.py for
aarch64-linux-gnu with GCC mainline.
* elf/loadtest.c (OUT): Define using do { } while (0).
Diffstat (limited to 'elf')
-rw-r--r-- | elf/loadtest.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/elf/loadtest.c b/elf/loadtest.c index 727469b496..b5eab5e93c 100644 --- a/elf/loadtest.c +++ b/elf/loadtest.c @@ -72,12 +72,16 @@ static const struct #define MAPS ((struct link_map *) _r_debug.r_map) -#define OUT \ - for (map = MAPS; map != NULL; map = map->l_next) \ - if (map->l_type == lt_loaded) \ - printf ("name = \"%s\", direct_opencount = %d\n", \ - map->l_name, (int) map->l_direct_opencount); \ - fflush (stdout) +#define OUT \ + do \ + { \ + for (map = MAPS; map != NULL; map = map->l_next) \ + if (map->l_type == lt_loaded) \ + printf ("name = \"%s\", direct_opencount = %d\n", \ + map->l_name, (int) map->l_direct_opencount); \ + fflush (stdout); \ + } \ + while (0) int |