From ac782f9e9ab0a39a3054e4c97653fafa8ea47a62 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 27 Jun 2017 17:52:42 +0000 Subject: 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). --- elf/loadtest.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'elf/loadtest.c') 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 -- cgit v1.2.3